package application;

import controleur.ConnexionBD;
import java.io.FileInputStream;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class ImageDAO
{
    /**
     * Transforme un ResultSet en liste de ImageBean
     * @param set
     * @return 
     */
    private static List<ImageBean> getImages(final ResultSet set)
    {
        List<ImageBean> imagesBeanListe = new ArrayList<ImageBean>();

        try {
            if (set != null) {
                while (set.next()) {
                    Image i = new Image();

                    i.setId(set.getString("id_image"));
                    i.setImage(set.getBlob("image"));

                    imagesBeanListe.add(i.getImageBean());
                }
            }
        } catch (Exception e) {
        }
        return imagesBeanListe;
    }

    /**
     * Retourne la liste des images d'un id.
     * @param id
     * @return 
     */
    public static List<ImageBean> getImage(final String id)
    {
        final String query = "select * from image where id_image=?";
        List<ImageBean> ibean;

        ConnexionBD con = new ConnexionBD();
        ibean = ImageDAO.getImages(con.execute_query(query, id));
        con.close();

        return ibean;
    }
    
    /**
     * Retourne la liste des images d'un membre
     * @param idMembre
     * @return 
     */
    public static List<ImageBean> getImageMembre(final String idMembre)
    {
        final String query = "select * from image where id_membre=?";
        List<ImageBean> ibean;

        ConnexionBD con = new ConnexionBD();
        ibean = ImageDAO.getImages(con.execute_query(query, idMembre));
        con.close();

        return ibean;
    }

    /**
     * Met à jour une image.
     * @param fin
     * @param idImage
     * @return 
     */
    public static int updateImage(final FileInputStream fin, final String idImage)
    {
        final String query = "update image set "
                + "image=? "
                + "where id_image=?";
        int r;

        ConnexionBD con = new ConnexionBD();
        r = con.execute_blob_update(query, fin, idImage);
        con.close();

        return r;
    }
    
    /**
     * Met à jour une image d'un membre.
     * @param fin
     * @param idMembre
     * @return 
     */
    public static int creerImage(final FileInputStream fin, String idMembre) {
        final String query = "INSERT INTO image (image, id_membre) VALUES (?, ?)";
        int r;

        ConnexionBD con = new ConnexionBD();
        r = con.execute_blob_update(query, fin, idMembre);
        con.close();

        return r;        
    }
    
    /**
     * Associe une image à un membre
     * @param idMembre
     * @param idImage
     * @return 
     */
    public static int associerImageMembre(final String idMembre, final String idImage) {
        final String query = "update membre "
                + "set id_image=? "
                + "where id_membre=?";
        int r;
        
        ConnexionBD con = new ConnexionBD();
        r = con.execute_update(query, idImage, idMembre);
        con.close();
        
        return r;
    }
}
